home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1994…tember: Reference Library / Dev.CD Sep 94.toast / Periodicals / develop / develop Issue 11 / develop 11 code / The NetWork Project / Examples (Sources) / NetSim / task.master.impl.p < prev    next >
Encoding:
Text File  |  1992-07-15  |  3.2 KB  |  118 lines  |  [TEXT/MPS ]

  1. {---------------------------------------------------------------}
  2. {    MasterTaskHandler    }
  3.  
  4. {••• still to do ••• idea:
  5.  
  6. We receive of small, fixed header size, and some data. We will use
  7. the data by a handle. }
  8. { © 1991 G. Sawitzki, Heidelberg}
  9.  
  10. type
  11.     tMasterTaskHandler=object(tTaskHandler)
  12.         StdHandle:Handle;
  13.     function tMasterTaskHandler.MsgUsable(var msg:MsgPtr):boolean;override;    
  14.     procedure tMasterTaskHandler.MsgEvaluation(var msg:MsgPtr);override;
  15.     function tMasterTaskHandler.NewPrioPtr(var PrioSize:longint):ptr;override;
  16.     function tMasterTaskHandler.NewCorePtr(var CoreSize:longint):ptr;override;
  17.     procedure tMasterTaskHandler.DisposPrioPtr(var PrioPtr:UNIV Ptr);override;
  18.     procedure tMasterTaskHandler.DisposCorePtr(var CorePtr:UNIV Ptr);override;
  19.     end;
  20.  
  21. function tMasterTaskHandler.MsgUsable(var msg:MsgPtr):boolean;override;    
  22. begin
  23.     MsgUsable:=false;
  24.     with tMsgHeaderPtr(msg^.msgPrioPtr)^ do begin
  25.         if version<>cMyMsgHeaderVersion then 
  26.         ProgramBreak('inconsistent header version. should not happen')
  27.         else {we only accept the current version}
  28.         case action of
  29.             aNoop:;
  30.             aExample:
  31.             begin 
  32.                 if (DistributionToken=longint(cDefaultDistribution)) &
  33.                 (DisplayToken=longint(cDefaultDisplay)) then begin
  34.                     with msg^ do begin
  35.                         MsgCorePtr:=NewCorePtr(MsgCoreSize);    {allocates a handle}
  36.                         Stamp(msg); 
  37.                         if MsgCorePtr<>nil then
  38.                         MsgUsable:=true;
  39.                     end;
  40.                 end;
  41.             end;
  42.             aDone:        ProgramBreak('aDone should not happen');
  43.             aSetConfig:    ProgramBreak('aSetConfig should not happen');
  44.             otherwise
  45.         end;
  46.     end;{with}
  47. end;
  48.  
  49.  
  50. procedure tMasterTaskHandler.MsgEvaluation(var msg:MsgPtr);
  51. var h:handle;
  52.     l:longint;s:str255;
  53. begin
  54.     with msg^ do begin
  55.     {$IFC false}
  56.         logString('immediate new task');    {temporary - while testing the schduler}
  57.         NetWorkScheduler.DoNewTask(MsgSource,MsgTrpPtr);} {keep sender busy -- quick reply}
  58.     {$ENDC}
  59.             h:=RecoverHandle(msg^.MsgCorePtr);
  60.             if h<>nil then begin
  61.             hunlock(h);
  62.             msg^.MsgCorePtr:=nil;{recipient has to clear it}
  63.             tMsgHeaderPtr(msg^.MsgPrioPtr)^.action:=aShow;
  64.             if ProcessMsg(tMsgHeaderPtr(msg^.MsgPrioPtr)^,h,false)<>noerr then;
  65.             end
  66.         else ProgramBreak('could not do recover handle');
  67.     end;{with}
  68.  
  69. end;
  70.  
  71.  
  72. function tMasterTaskHandler.NewPrioPtr(var PrioSize:longint):ptr;override;
  73. var mysize:longint;
  74. begin 
  75.     if PrioSize>sizeOf(tMsgHeader) then begin 
  76.         PrioSize:=0;NewPrioPtr:=nil
  77.     end else begin
  78.         mysize:=sizeof(tMsgHeader);    {reserve some fixed additional space for handle}
  79.         NewPrioPtr:=inherited NewPrioPtr(mysize);
  80.     end;
  81. end;
  82.  
  83. function tMasterTaskHandler.NewCorePtr(var CoreSize:longint):ptr;override;
  84. var h:handle;
  85. begin 
  86.     if CoreSize=0 then NewCorePtr:=nil
  87.     else begin
  88.         h:=NewHandle(CoreSize);
  89.         if h<>nil then begin
  90.             Hlock(h);
  91.             NewCorePtr:=h^;
  92.         end else begin
  93.             NewCorePtr:=nil;
  94.             CoreSize:=0;
  95.         end;
  96.     end;
  97. end;
  98.  
  99.  
  100. procedure tMasterTaskHandler.DisposPrioPtr(var PrioPtr:UNIV Ptr);override;
  101. begin
  102.     {To do: handle based implementation}
  103.     inherited DisposPrioPtr(PrioPtr);
  104. end;        
  105.  
  106. procedure tMasterTaskHandler.DisposCorePtr(var CorePtr:UNIV Ptr);override;
  107. var h:handle;
  108. begin 
  109.     if CorePtr<>nil then begin
  110.         h:=RecoverHandle(CorePtr);
  111.         if h=nil then debugstr('could not recover handle')
  112.         else begin HUnlock(h);DisposHandle(h);end;
  113.         CorePtr:=nil;
  114.     end;
  115. end;
  116.  
  117.  
  118.